home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / Projects / Stretching the Mind / symbol-to-mapped-integer examp. < prev    next >
Lisp/Scheme  |  1996-11-15  |  3KB  |  82 lines

  1. (setq harmonized-melodies
  2.    (filter-harmonize2 melody-1-source melody-2-source 12 
  3.                    (activate-tonality (harmonic-minor b 2 ))
  4.                    '((4 4))
  5.                    '((1 2 6 8 10 11))))
  6.  
  7. Since filter-harmonize is called with giving tonality in form
  8.  
  9.    (activate-tonality (harmonic-minor b 2))
  10.    select it and notice it returns ((b 2 c# 3 d 3 e 3 f# 3 g 3 a# 3))
  11.  
  12. Now, within filter-harmonize2 it is supplied to build-maptable
  13.  
  14. (defun filter-harmonize2 (mel1 mel2 mod-val tonality n-control s-values)
  15.   (diagnostic2 "filter-harmonize" $cr$)
  16.   (setq mel1 (symbol-trim (length mel2) mel1))
  17.   (prog (out1 out2 gap swap counter n n-times n-count n-values s-master semitones
  18.               maptable)
  19.     (setq maptable (build-maptable (car tonality)))
  20.  
  21. This means that maptable is build this way
  22.  
  23.    (setq maptable (build-maptable (car (activate-tonality (harmonic-minor b 2)))))
  24.  
  25. Now you can map symbols.
  26.  
  27. (symbol-to-mapped-integer 'a maptable)
  28. --> 35
  29.  
  30. (symbol-to-mapped-integer 'b maptable)
  31. --> 37
  32.  
  33. Notice that the tonality was harmonic-minor and that's why the mapping
  34. is 37. That means: 2 semitones. The map results are ABSOLUTE MIDI note
  35. values.
  36.  
  37. Now make a checking that the result is within given absolute boundaries
  38. and if exceed transpose the symbol down until it does not exceed. Then
  39. collect the symbol on list which you return.
  40.  
  41. (defun process-mapping (symbols tonality)
  42.   (let ((collect nil)
  43.         (maptable (build-maptable (car tonality))))
  44.     (dolist (x symbols)
  45.       (push (symbol-to-mapped-integer x maptable) collect)) ;; <<- put here your test & integer to symbol
  46.     (nreverse collect)))
  47.  
  48. (process-mapping '(a b c d) (activate-tonality (major c 4)))
  49. --> (35 37 38 40)
  50.  
  51. Here is the principle
  52.  
  53. (defun symbol-remap (symbols tonality)
  54.   (let ((collect nil)
  55.         (maptable (build-maptable (car tonality))))
  56.     (dolist (x symbols)
  57.       (let ((note (- (symbol-to-mapped-integer x maptable) 48)))
  58.         (if (> note 20)
  59.           (push (integer-to-symbol (- note 12)) collect)
  60.           (push (integer-to-symbol note) collect))))
  61.     (nreverse collect)))
  62.  
  63. (symbol-remap '(a b c d e f g h i j k l m n o p q r s t u v) (activate-tonality (major c 4)))
  64. --> (a c e f h j l m o q r t j l m o q r t v x y)
  65.  
  66. Or you might use the mod. Here the note is moded which keeps the value
  67. within 0 to 11 whatever is the note. If you use (mod note 24) then the area
  68. is 24 semitones. Area does not have to be an octave, it might be as well
  69. 5 semitones. So, whatever happens in the symbol it is coerced to happen
  70. within that window.
  71.  
  72. (defun symbol-remap (symbols tonality)
  73.   (let ((collect nil)
  74.         (maptable (build-maptable (car tonality))))
  75.     (dolist (x symbols)
  76.       (let ((note (- (symbol-to-mapped-integer x maptable) 48)))
  77.         (push (integer-to-symbol (mod note 12)) collect)))
  78.     (nreverse collect)))
  79.  
  80. (symbol-remap '(a b c d e f g h i j k l m n o p q r s t u v) (activate-tonality (major c 4)))
  81. --> (a c e f h j l a c e f h j l a c e f h j l a)
  82.